Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра САП
ЛАБОРАТОРНА РОБОТА №3
з курсу: “Геометричне моделювання у конструюванні інженерних об’єктів і систем”
ГРАФІЧНІ ФУНКЦІЇ WINDOWS-ІНТЕРФЕЙСУ (WinAPI) ЗАСОБАМИ BORLAND PASCAL 7.0 FOR WINDOWS ТА BORLAND DELPHI
МЕТА РОБОТИ
ТЕОРЕТИЧНІ ВІДОМОСТІ
3. ІНДИВІДУАЛЬНЕ ЗАВДАННЯ
ТЕКСТ ПРОГРАМИ
program Plechin3;
uses
SysUtils,
Windows,
Messages;
var
wc : TWndClassEx; // Зміна шаблону класу вікна.
MainWnd : HWND; // Описувач головного вікна.
Mesg : TMsg; // Змінна для циклу збора повідомлень.
xPos, yPos, nWidth, nHeight : Integer; // Деякі параметри вікна.
MyDC, OldDC : HDC; // Контекст пристрою.
brush : HBrush; // Пензлик.
// Координати початків координат для всіх графіків.
ox1, oy1, ox2, oy2, ox3, oy3 : real;
// Зміщення центрів координат від центру екрана.
d_ox1, d_oy1, d_ox2, d_oy2, d_ox3, d_oy3 : real;
OX, OY : real; // Центр екрану.
rec : TRect; // Область вікна для малювання.
lenght, c_lenght : real; // Довжина півосі з її поч. незмінним значенням.
zoom : real; // Масштаб. По замовчуванню = 1.
// Віконна процедура головного вікна.
function WindowProc(wnd : HWND; Msg : Integer; Wparam : Wparam; Lparam : Lparam) : Lresult;
stdcall;
Begin
// Далі проходить цикл обробки повідомлень.
case msg of
wm_destroy :
// Повідомленні, яке надсилається при знищенні вікна.
begin
postquitmessage(0);
exit;
Result := 0;
end
else Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
end;
//---------------------------------------------------------------------------
// Процедура побудови графіка функції y(x).
// Значення x і y множаться на 50 щоб більшим був графік.
procedure Yx(ox, oy, xbegin, xend, krok : real; color : longint);
var
x, y : double; // Центр графіка.
pen : HPen; // Тимчасове перо.
begin
pen := CreatePen(ps_Solid, 2, color); // Створюємо перо.
SelectObject(MyDC, pen); // Реєструємо його в контексті пристрою.
// Знаходимо першу точку графіка.
x := xbegin;
y := sin(x);
MoveToEx(MyDC, Round(x*50*zoom+ox), Round(oy-y*50*zoom), nil); // Переводимо туди курсор.
x := x + krok; // Збільшуємо кут.
// Знаходимо наступні точки графіка і малюємо лінії.
repeat
y := sin(x);
LineTo(MyDC, Round(x*50*zoom+ox), Round(oy-y*50*zoom));
x := x + krok;
until x > xend;
DeleteObject(pen); // Видаляєм перо.
end;
//---------------------------------------------------------------------------
// Процедура побудови графіка функції y3(x).
// Значення x і y множаться на 50 щоб більшим був графік.
procedure Y3x(ox, oy, xbegin, xend, krok : real; color : longint);
var
x, y, m : double; // Центр графіка.
pen : HPen; // Тимчасове перо.
begin
pen := CreatePen(ps_Solid, 2, color); // Створюємо перо.
SelectObject(MyDC, pen); // Реєструємо його в контексті пристрою.
// Знаходимо першу точку графіка.
x := xbegin;
y := x - x*x*x/6 + x*x*x*x*x/120;
MoveToEx(MyDC, Round(x*50*zoom+ox), Round(oy-y*50*zoom), nil); // Переводимо туди курсор.
x := x + krok; // Збільшуємо кут.
// Знаходимо наступні точки графіка і малюємо лінії.
repeat
y := x - x*x*x/6 + x*x*x*x*x/120;
LineTo(MyDC, Round(x*50*zoom+ox), Round(oy-y*50*zoom));
x := x + krok;
until x > xend;
DeleteObject(pen); // Видаляєм перо.
end;
//---------------------------------------------------------------------------
// Процедура побудови графіка функції y4(x).
// Значення x і y множаться на 50 щоб більшим б...